In most network routing/switching equipment, the amount of time required to process packets can vary. For example, packets can arrive as fragments or arrive out of order on different links. The packets or packet fragments may be buffered while waiting for other packets or packet fragments to arrive. The amount of time required to process a packet after the packet segments have arrived can also vary depending on what feature set is enabled. Other examples of various amount of packet processing includes packet encapsulation and/or de-capsulation for tunneling features, packet encryption/decryption for security processing, packet content matching across multiple packets in individual packet flows, and applying various access control/QOS enforcements based on individual policies. These different processing features, which apply to individual packets, may require different amounts of processing time.
In conventional routing equipment, large latency periods during this variable processing time can create backups in packet queues and eventually cause packet drops. Some of the dropped packets may be control packets used for maintaining network links. Other dropped packets might affect packet prioritization. For example, some of the dropped packets may have higher quality of service values than other packets. Unfortunately, the arriving packets may be indiscriminately dropped before the packet processor has a chance to take into account associated control or QoS information.
One solution for minimizing dropped packets is to dedicate a large amount of memory on the ingress path for buffering packets that are waiting on other packets or packets that require additional processing before being transmitted. As such, most of the ingress traffic is essentially delayed while certain packets await additional data or undergo additional processing. In some cases, certain high-priority traffic is allowed to “skip” the certain delayed packets to ensure that QoS is maintained for some high-priority data. Although packet buffering schemes can be more reliable than dropping packets, it tends to add costs, both monetary and computational.
Another solution involves using a parallel processing path, referred to as a “recirculation” path, which allows packets that need additional processing to be processed by a parallel processing scheme and “recirculated” back for queuing with the ingress network port traffic. However, in order to maintain the quality of ingress traffic service, recirculation traffic is typically allocated only a relatively small amount of guaranteed bandwidth. Also usually re-circulation path traffic are given lower priority than ingress traffic. This can result is even longer delays (and even drops) in the recirculation path for processing various packet processing features